package com.面试题;

import java.util.ArrayList;

public class 引用类型传参问题 {
    public static void main(String[] args) {
        ArrayList<String> list = null;
        test(list);//此处将list中存放的地址null传递给test()的形参list,然后test()中的list又指向了新的ArrayList对象,后又进行add操作,但都与主函数中的list无关了,于是下面主函数中打印list.size()的结果出现了空指针异常
        System.out.println(list.size());//NullPointerException

        /*如果在main函数中调用test()传参之前就new ArrayList(),那么main函数中将不不产生空指针异常问题,传给test()形参的将是创建的这个ArrayList,但是在test中又再次new ArrayList(),test中list将指向新的ArrayList,add操作与主函数中的ArrayList无关,所以主函数中list.size()==0
        ArrayList<String> list = new ArrayList<>();
        test(list);
        System.out.println(list.size());*/
    }

    private static void test(ArrayList<String> list) {
        //此时list --> null
        if (list == null) {
            System.out.println("list == null");//list == null
        }
        list = new ArrayList<>();//此时list --> 新的ArrayList
        if (list != null) {
            System.out.println("list != null");//list != null
        }
        list.add("123");//此list非main函数中的list,main函数中的list依旧指向null
    }
}